home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / catman / p_man / cat3 / complib / dggsvp.z / dggsvp
Text File  |  1996-03-14  |  6KB  |  199 lines

  1.  
  2.  
  3.  
  4. DDDDGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))                                                          DDDDGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      DGGSVP - compute orthogonal matrices U, V and Q such that   N-K-L K L
  10.      U'*A*Q = K ( 0 A12 A13 ) if M-K-L >= 0
  11.  
  12. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  13.      SUBROUTINE DGGSVP( JOBU, JOBV, JOBQ, M, P, N, A, LDA, B, LDB, TOLA, TOLB,
  14.                         K, L, U, LDU, V, LDV, Q, LDQ, IWORK, TAU, WORK, INFO )
  15.  
  16.          CHARACTER      JOBQ, JOBU, JOBV
  17.  
  18.          INTEGER        INFO, K, L, LDA, LDB, LDQ, LDU, LDV, M, N, P
  19.  
  20.          DOUBLE         PRECISION TOLA, TOLB
  21.  
  22.          INTEGER        IWORK( * )
  23.  
  24.          DOUBLE         PRECISION A( LDA, * ), B( LDB, * ), Q( LDQ, * ), TAU(
  25.                         * ), U( LDU, * ), V( LDV, * ), WORK( * )
  26.  
  27. PPPPUUUURRRRPPPPOOOOSSSSEEEE
  28.      DGGSVP computes orthogonal matrices U, V and Q such that
  29.                    L ( 0     0   A23 )
  30.                M-K-L ( 0     0    0  )
  31.  
  32.                       N-K-L  K    L
  33.              =     K ( 0    A12  A13 )  if M-K-L < 0;
  34.                  M-K ( 0     0   A23 )
  35.  
  36.                     N-K-L  K    L
  37.       V'*B*Q =   L ( 0     0   B13 )
  38.                P-L ( 0     0    0  )
  39.  
  40.      where the K-by-K matrix A12 and L-by-L matrix B13 are nonsingular upper
  41.      triangular; A23 is L-by-L upper triangular if M-K-L >= 0, otherwise A23
  42.      is (M-K)-by-L upper trapezoidal.  K+L = the effective numerical rank of
  43.      the (M+P)-by-N matrix (A',B')'.  Z' denotes the transpose of Z.
  44.  
  45.      This decomposition is the preprocessing step for computing the
  46.      Generalized Singular Value Decomposition (GSVD), see subroutine DGGSVD.
  47.  
  48.  
  49. AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
  50.      JOBU    (input) CHARACTER*1
  51.              = 'U':  Orthogonal matrix U is computed;
  52.              = 'N':  U is not computed.
  53.  
  54.      JOBV    (input) CHARACTER*1
  55.              = 'V':  Orthogonal matrix V is computed;
  56.              = 'N':  V is not computed.
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. DDDDGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))                                                          DDDDGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))
  71.  
  72.  
  73.  
  74.      JOBQ    (input) CHARACTER*1
  75.              = 'Q':  Orthogonal matrix Q is computed;
  76.              = 'N':  Q is not computed.
  77.  
  78.      M       (input) INTEGER
  79.              The number of rows of the matrix A.  M >= 0.
  80.  
  81.      P       (input) INTEGER
  82.              The number of rows of the matrix B.  P >= 0.
  83.  
  84.      N       (input) INTEGER
  85.              The number of columns of the matrices A and B.  N >= 0.
  86.  
  87.      A       (input/output) DOUBLE PRECISION array, dimension (LDA,N)
  88.              On entry, the M-by-N matrix A.  On exit, A contains the
  89.              triangular (or trapezoidal) matrix described in the Purpose
  90.              section.
  91.  
  92.      LDA     (input) INTEGER
  93.              The leading dimension of the array A. LDA >= max(1,M).
  94.  
  95.      B       (input/output) DOUBLE PRECISION array, dimension (LDB,N)
  96.              On entry, the P-by-N matrix B.  On exit, B contains the
  97.              triangular matrix described in the Purpose section.
  98.  
  99.      LDB     (input) INTEGER
  100.              The leading dimension of the array B. LDB >= max(1,P).
  101.  
  102.      TOLA    (input) DOUBLE PRECISION
  103.              TOLB    (input) DOUBLE PRECISION TOLA and TOLB are the thresholds
  104.              to determine the effective numerical rank of matrix B and a
  105.              subblock of A. Generally, they are set to TOLA =
  106.              MAX(M,N)*norm(A)*MAZHEPS, TOLB = MAX(P,N)*norm(B)*MAZHEPS.  The
  107.              size of TOLA and TOLB may affect the size of backward errors of
  108.              the decomposition.
  109.  
  110.      K       (output) INTEGER
  111.              L       (output) INTEGER On exit, K and L specify the dimension
  112.              of the subblocks described in Purpose.  K + L = effective
  113.              numerical rank of (A',B')'.
  114.  
  115.      U       (output) DOUBLE PRECISION array, dimension (LDU,M)
  116.              If JOBU = 'U', U contains the orthogonal matrix U.  If JOBU =
  117.              'N', U is not referenced.
  118.  
  119.      LDU     (input) INTEGER
  120.              The leading dimension of the array U. LDU >= max(1,M) if JOBU =
  121.              'U'; LDU >= 1 otherwise.
  122.  
  123.      V       (output) DOUBLE PRECISION array, dimension (LDV,M)
  124.              If JOBV = 'V', V contains the orthogonal matrix V.  If JOBV =
  125.              'N', V is not referenced.
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. DDDDGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))                                                          DDDDGGGGGGGGSSSSVVVVPPPP((((3333FFFF))))
  137.  
  138.  
  139.  
  140.      LDV     (input) INTEGER
  141.              The leading dimension of the array V. LDV >= max(1,P) if JOBV =
  142.              'V'; LDV >= 1 otherwise.
  143.  
  144.      Q       (output) DOUBLE PRECISION array, dimension (LDQ,N)
  145.              If JOBQ = 'Q', Q contains the orthogonal matrix Q.  If JOBQ =
  146.              'N', Q is not referenced.
  147.  
  148.      LDQ     (input) INTEGER
  149.              The leading dimension of the array Q. LDQ >= max(1,N) if JOBQ =
  150.              'Q'; LDQ >= 1 otherwise.
  151.  
  152.      IWORK   (workspace) INTEGER array, dimension (N)
  153.  
  154.      TAU     (workspace) DOUBLE PRECISION array, dimension (N)
  155.  
  156.      WORK    (workspace) DOUBLE PRECISION array, dimension (max(3*N,M,P))
  157.  
  158.      INFO    (output) INTEGER
  159.              = 0:  successful exit
  160.              < 0:  if INFO = -i, the i-th argument had an illegal value.
  161.  
  162. FFFFUUUURRRRTTTTHHHHEEEERRRR DDDDEEEETTTTAAAAIIIILLLLSSSS
  163.      The subroutine uses LAPACK subroutine DGEQPF for the QR factorization
  164.      with column pivoting to detect the effective numerical rank of the a
  165.      matrix. It may be replaced by a better rank determination strategy.
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.